第2节 大白智能分拣


使用OpenCV来识别圆形物体,若识别到则发送串口指令给Arduino。Arduino控制机械臂和电磁铁进行抓取

训练大白认识圆形

利用霍夫变换来进行圆环检测。一个圆环需要3个参数来确定,所以进行圆环检测的累加器必须是三维的,这样效率就会很低,因此OpenCV使用了霍夫梯度法这个巧妙的方法,来使用边界的梯度信息,从而提升计算的效率。

OpenCV中进行霍夫圆环检测的函数:

cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)

本例中使用的具体参数:

cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT , 1, 100, param1=100, param2=100, minRadius=50,maxRadius=200)

参数解释: image:8位,单通道图像。如果使用彩色图像,需要先转换为灰度图像。

method:定义检测图像中圆的方法。目前唯一实现的方法是cv2.HOUGH_GRADIENT。

dp:累加器分辨率与图像分辨率的反比。dp获取越大,累加器数组越小。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。

minDist:为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。

param1:有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。

param2:也有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示在检测阶段圆心的累加器阈值。它越小的话,就可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。

minRadius:默认值0,表示圆半径的最小值。单位是像素。

maxRadius:也有默认值0,表示圆半径的最大值。单位是像素。

示例:

原始图像: 微信截图_20190807142357

处理后图像: 微信截图_20190807142305

会自动抓取硬币的机械臂

视觉图像经由OpenCV处理后,如果识别到圆形,就通过串口将信息发送给Arduino,Arduino接收到信号后,控制云台舵机转动,并通过电磁铁将圆形物品分拣处理

原理图

摄像头\n机械臂\n电磁传感器->大白\n树莓派: CSI/USB/GPIO
大白\n树莓派-->传送带: 摄像头实时监测
Note right of 大白\n树莓派: OpenCV处理摄像头数据\n发送指令给机械臂和电磁传感器

硬件准备

  • 大白

  • Arduino

  • CSI摄像头

  • 摄像头桌面支架

  • 待检测的圆形金属物体(任选)

硬件连接

  • 将烧录好程序的Arduino通过USB连接到树莓派

  • 电磁传感器连接到pin5,两个舵机连接到3和4

  • 用乐高制作传送带和摄像头支架参考活动,将待检测的物体放置在传送带上,使传送带缓慢转动

  • USB摄像头垂直固定在传送带顶部,使之能够看到传送带上的物体

微信截图_20190807145616

启动智能分拣系统

1.使用远程桌面或HDMI视频输出连接到树莓派

2.打开终端,输入cd ~/Desktop/learn-ai/codes/chapter4/part2_AutoSort/AutoSort

3.输入python classifier.py

© 北京师范大学智慧学习研究院 all right reserved,powered by Gitbook修订时间: 2020-10-28

results matching ""

    No results matching ""

    results matching ""

      No results matching ""